"""
编写一个函数 merge_sort_and_top，该函数接受两个元组和一个关键字参数 n（默认值为5）。
函数应返回一个新的元组，其中包含两个元组中的所有元素，并按升序排序，但只取前 n 个元素。

    例如：	result = merge_sort_and_top((7, 3, 10, 5), (6, 2, 8, 4), n=3)
            print(result) # 输出：(2, 3, 4)
"""


def merge_sort_and_top(tuple1, tuple2, *, n=5):
    """
    合并两个元组并返回排序后的前n个元素

    Args:
        tuple1: 第一个输入元组
        tuple2: 第二个输入元组
        n: 需要返回的元素数量（关键字参数，默认值为5）

    Returns:
        tuple: 合并排序后的前n个元素组成的元组
    """
    try:
        # 验证输入类型
        if not (isinstance(tuple1, tuple) and isinstance(tuple2, tuple)):
            raise TypeError("输入必须是元组类型")

        # 验证n的值
        if not isinstance(n, int) or n < 1:
            raise ValueError("n必须是正整数")

        # 合并、排序并取前n个元素（使用一行代码完成）
        return tuple(sorted(tuple1 + tuple2)[:n])

    except Exception as e:
        print(f"错误: {str(e)}")
        return tuple()


def main():
    # 测试用例
    test_cases = [
        ((7, 3, 10, 5), (6, 2, 8, 4), 3),  # 基本测试
        ((1, 3, 5), (2, 4, 6), 4),  # 有序数列
        ((10,), (5,), 1),  # 单元素元组
        (tuple(), (1, 2, 3), 2),  # 空元组
        ((1, 1, 1), (2, 2, 2), 3),  # 重复元素
    ]

    print("开始测试merge_sort_and_top函数...")
    for t1, t2, n in test_cases:
        result = merge_sort_and_top(t1, t2, n=n)
        print(f"\n输入: {t1}, {t2}, n={n}")
        print(f"输出: {result}")


if __name__ == "__main__":
    main()